import request from '@/utils/request.ts';
import {
  type ChangePasswordRequest,
  type PageResult,
  type ResetPasswordRequest,
  type User,
  type UserQueryParams,
  type UserRequest,
  type UserStats
} from '@/types/system/user.ts';

/**
 * 分页查询用户列表
 * @param params 查询参数
 * @returns 分页结果
 */
export function getUserPage(params: UserQueryParams) {
  return request<PageResult<User>>({
    url: '/users/list',
    method: 'get',
    params
  });
}

/**
 * 获取用户详情
 * @param id 用户ID
 * @returns 用户详情
 */
export function getUserDetail(id: number) {
  return request<User>({
    url: `/users/${id}`,
    method: 'get'
  });
}

/**
 * 获取当前用户信息
 * @returns 用户信息
 */
export function getCurrentUser() {
  return request<User>({
    url: '/users/current',
    method: 'get'
  });
}

/**
 * 创建用户
 * @param data 用户数据
 * @returns 用户ID
 */
export function createUser(data: UserRequest) {
  return request<number>({
    url: '/users',
    method: 'post',
    data
  });
}

/**
 * 更新用户
 * @param data 用户数据
 * @returns 是否成功
 */
export function updateUser(data: UserRequest) {
  return request<boolean>({
    url: '/users',
    method: 'put',
    data
  });
}

/**
 * 删除用户
 * @param id 用户ID
 * @returns 是否成功
 */
export function deleteUser(id: number) {
  return request<boolean>({
    url: `/users/${id}`,
    method: 'delete'
  });
}

/**
 * 修改密码
 * @param data 密码数据
 * @returns 是否成功
 */
export function changePassword(data: ChangePasswordRequest) {
  return request<boolean>({
    url: '/users/password',
    method: 'put',
    data
  });
}

/**
 * 重置密码
 * @param data 重置密码数据
 * @returns 是否成功
 */
export function resetPassword(data: ResetPasswordRequest) {
  return request<boolean>({
    url: '/users/password/reset',
    method: 'put',
    data
  });
}

/**
 * 更新用户状态
 * @param id 用户ID
 * @param status 状态
 * @returns 是否成功
 */
export function updateUserStatus(id: number, status: number) {
  return request<boolean>({
    url: `/users/${id}/status`,
    method: 'put',
    params: { status }
  });
}

/**
 * 获取用户统计信息
 * @returns 用户统计信息
 */
export function getUserStats() {
  return request<UserStats>({
    url: '/users/stats',
    method: 'get'
  });
}

/**
 * 上传用户头像
 * @param file 头像文件
 * @returns 头像URL
 */
export function uploadAvatar(file: File) {
  const formData = new FormData();
  formData.append('file', file);

  return request<string>({
    url: '/users/avatar',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}
